package com.ruoyi.exam.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.exam.domain.ExamQuestionBank;
import com.ruoyi.exam.vo.BankProgressInfoVo;
import com.ruoyi.exam.vo.ExamQuestionBankVo;
import com.ruoyi.exam.vo.WeeklyCheckInVo;

import java.util.List;
import java.util.Map;

/**
 * 题库Service接口
 *
 * @author Tellsea
 * @date 2025-05-30
 */
public interface IExamQuestionBankService extends IService<ExamQuestionBank> {

    /**
     * 分页查询
     *
     * @param entity
     * @return
     */
    TableDataInfo<ExamQuestionBankVo> queryList(ExamQuestionBankVo entity);

    /**
     * 查询全部
     *
     * @param entity
     * @return
     */
    List<ExamQuestionBankVo> queryAll(ExamQuestionBankVo entity);

    /**
     * 根据ID查询
     *
     * @param bankId
     * @return
     */
    ExamQuestionBankVo queryById(Long bankId);

    /**
     * 查询我的题库分类列表
     *
     * @return
     */
    List<ExamQuestionBankVo> myCategoryList(ExamQuestionBankVo entity, Long userId);

    /**
     * 查询我的题库列表（通过用户关联的班次->课程->题库）
     *
     * @param userId 用户ID
     * @return 题库列表
     */
    List<ExamQuestionBankVo> myQuestionBankList(Long userId);

    /**
     * 查询题库进度信息（题目总数和用户答题情况）
     *
     * @param bankId 题库ID
     * @param userId 用户ID
     * @return 题库进度信息
     */
    BankProgressInfoVo getBankProgressInfo(Long bankId, Long userId);

    /**
     * 查询用户在指定题库的学习天数
     *
     * @param bankId 题库ID
     * @param userId 用户ID
     * @return 学习天数
     */
    Long getStudyDays(Long bankId, Long userId);

    /**
     * 查询用户本周答题打卡情况
     *
     * @param userId 用户ID
     * @return 本周打卡情况
     */
    WeeklyCheckInVo getWeeklyCheckIn(Long userId);

    /**
     * 查询用户在指定题库的答题统计信息
     *
     * @param bankId 题库ID
     * @param userId 用户ID
     * @return 答题统计信息（总答题数、正确答题数、正确率）
     */
    Map<String, Object> getUserAnswerStats(Long bankId, Long userId);
}
